package com.heima.lock.collection;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;

/**
 * @author 陈辉
 * @data 2024 15:01
 *
 * 在通过迭代器Iterator迭代遍历过程中，一边遍历，一边修改集合长度，集合采用的处理机制。
 *
 *      Fail-fast： 快速失败机制。   ConcurrentModificationException       CAP定理  ： CP
 *      基于Fail-fast机制的集合：ArrayList,HashSet,HashMap....
 *
 *
 *      Fail-safe： 不安全可用机制。   AP
 *      基于Fail-safe机制的集合：CopyOnWriteArrayList,CopyOnWriteArraySet,ConcurrentHashMap....
 */

public class ArrayListDemo2 {
    public static void main(String[] args) {
        CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
        Collections.addAll(list,"hello","world","java","javaWeb");

        //int cursor;  2        已经迭代的元素个数
        //          4                   5
        //int expectedModCount =     modCount;
        //     预期修改次数        实际修改次数
        Iterator<String> it = list.iterator();
        while (it.hasNext()){
            String s = it.next();
            if (s.equals("world")){
                list.add("SpringBoot");
            }

            System.out.println(s);
        }

        System.out.println("list = " + list);
    }
}
